<?php

    class CDataValidator 
    {
		//check polish NIP
		static function CheckNip($szNip)
		{
		    $szNip 	= trim($szNip);
		    $iNipLen	= strlen($szNip);
		    $szNo 	= '';
		    
		    if( !$szNip  ) { return false; }
		    
		    for($i=0; $i < $iNipLen; $i++)
		    {
			$iChr = $szNip[$i];
			
			if($iChr >= '0' && $iChr <= '9')
			{
			    $szNo .= $iChr;
			}
		    }
		    
		    if( strlen($szNo) != 10) { return false; }
		    
		    $aWeights = array('6','5','7','2','3','4','5','6','7');
		    
		    $iSum = 0;
		    
		    for($i=0; $i < 9; $i++)
		    {
				$iSum += $szNo[$i] * $aWeights[$i];
		    }
		    
		    if($iSum % 11 == $szNo[9])
		    {
				return true;
		    }
		    
		    return false;
		}
		
		//check IBAN bank account no
		static function CheckIBAN($szIBAN)
		{
		    if(strlen($szIBAN) != 26)
		    {
			return false;
		    }
		    
		    $aWeights = array(1,10,3,30,9,90,27,76,81,34,49,5,50,15,53,45,62,38,89,17,
			              73,51,25,56,75,71,31,19,93,57);
					    
		    $szIBAN .= '2521';
		    $szIBAN  = substr($szIBAN,2).substr($szIBAN,0,2);
		
		    $iSum =0;
		    
		    for($i=0; $i<30; $i++)
		    {
		        $iSum += $szIBAN[29-$i] * $aWeights[$i];
		    }
		
		     if($iSum % 97 == 1)
		     {
		        return true;
		     }
			
		     return false;
		}
		
		//validate email
		static function CheckEmail($szMail)
		{
		    if(preg_match('/^[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$/i' ,$szMail))
		    {
				list($szUser,$szDomain) = split('@',$szMail);
				
				//if(checkdnsrr($szDomain,'ANY') === FALSE)
				//	return false;
				
				return true;
		    }
		
		    return false;
		}
		
		//validate polish postal code
		static function CheckPostCode($szPostCode)
		{
		    return ereg('^[0-9]{2}-[0-9]{3}$',$szPostCode) ? true : false;
		}
		
		//validate phone number
		static function CheckPhone($szPhone)
		{
		    //return preg_match('^[0-9-()# ]*$',$szPhone) ? true : false;
		    
		    return preg_match('#^[0-9- ]*$#is',$szPhone) ? true : false;
		}
		
		static function CheckUrl($szUrl)
		{
		    //return preg_match('#^(http:\/\/|https:\/\/|www\.)(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?(\/)*$#i',$szUrl);
		    
		    return preg_match('/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i',$szUrl);
		}
		
		static function OnlyLetters($szStr)
		{
		    return preg_match('#^[a-zA-Z-ąćęłńóśźżĄĆĘŁŃÓŚŹŻ ]*$#is',$szStr) ? true : false;
		}
		
		static function OnlyLettersAndDights($szStr)
		{
		    return preg_match('#^[a-zA-Z0-9-ąćęłńóśźżĄĆĘŁŃÓŚŹŻ ]*$#is',$szStr) ? true : false;
		}
		
		static function OnlyPrintable($szStr)
		{
		    return preg_match('#^[a-zA-Z0-9_\-.:!?;ąćęłńóśźżĄĆĘŁŃÓŚŹŻ ]*$#is',$szStr) ? true : false;
		}
		
		static function OnlyDights($szStr)
		{
		    return preg_match('#^[0-9]*$#is',$szStr) ? true : false;
		}
		
		static function CheckUTF8($szStr)
		{
			return preg_match('/^([[:alpha:]])*$/u',$szStr);
			
		}
    }

?>